package br.com.beautycenter.view;

import Funcionalidades.Data;
import br.com.beautycenter.Funcionalidades.Bean;
import br.com.beautycenter.Funcionalidades.Swing;
import br.com.beautycenter.Funcionalidades.Validacoes;
import br.com.beautycenter.DAO.PersisteFeriado;
import br.com.beautycenter.bean.Feriado;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
import org.joda.time.DateTime;

public class CadastroFeriados extends javax.swing.JFrame {

    Feriado feriado = new Feriado();
    Feriado feriadoTemp = new Feriado();
    PersisteFeriado persisteFeriado = new PersisteFeriado();
    static List<Feriado> listaFeriados = new ArrayList<Feriado>();

    public CadastroFeriados() {
        initComponents();
        iniciarTela();
    }
    /**
     * operacao = 0 -> salvar operacao = 1 -> atualizar operacao = 2 -> excluir
     */
    int operacao = 0;
    int posicao = -1;

    private void iniciarTela() {
        limparCampos();
        desativarCampos();
        listaFeriados = persisteFeriado.retornarFeriado();
        ativarBotoesIniciar();
    }

    private void limparCampos() {
        Swing.zerarCampos(jPanelPrincipal.getComponents());
        jDateFeriado.setDate(null);
    }

    private void desativarCampos() {
        Swing.desativarCampos(jPanelPrincipal.getComponents());
    }

    private void ativarBotoesIniciar() {
        Swing.desativarCampos(jPanelBotoes.getComponents());

        //se a lista estiver vazia, cria um novo
        if (listaFeriados.isEmpty()) {
            novo();
        } else if (posicao < 0) {
            btnNovo.setEnabled(true);
            btnPesquisar.setEnabled(true);
            btnSair.setEnabled(true);
        } else {
            btnNovo.setEnabled(true);
            btnPesquisar.setEnabled(true);
            btnSair.setEnabled(true);
            btnEditar.setEnabled(true);
            btnExcluir.setEnabled(true);
        }

    }

    private void ativarCampos() {
        Swing.ativarCampos(jPanelPrincipal.getComponents());
        jDateFeriado.setEnabled(true);
        txtDescricaoFeriado.setEnabled(true);
    }

    public void ativarBotoesSalvarCancelarSair() {
        Swing.desativarCampos(jPanelBotoes.getComponents());
        btnSalvar.setEnabled(true);
        btnCancelar.setEnabled(true);
        btnSair.setEnabled(true);
    }

    public boolean validarDescricao() {
        if (!Validacoes.validarCampoTexto(txtDescricaoFeriado.getText().trim())) {
            JOptionPane.showMessageDialog(null, "Campo descrição é obrigatório!");
            txtDescricaoFeriado.requestFocus();
            return false;
        }

        feriadoTemp.setDescricaoFeriado(txtDescricaoFeriado.getText().trim());
        return true;
    }

    public boolean validarDataFeriado() {
        Feriado temp = new Feriado();
        DateTime dataLista;
        temp.setDtFeriado(jDateFeriado.getDate());
                        
        DateTime dataCampo = new DateTime(temp.getDtFeriado().getTime());
        
        //se a operação foi de atualizar e as datas do campo e lista forem iguais, não há nada de errado
        if(operacao == 1){
            dataLista = new DateTime(listaFeriados.get(posicao).getDtFeriado().getTime());
            if(Data.compararDatas(dataCampo, dataLista)) return true;
        }
        if (!persisteFeriado.retornarFeriadoPelaData(temp).isEmpty()) {
            jDateFeriado.requestFocus();
            JOptionPane.showMessageDialog(null, "A data informada já encontra-se cadastrada para algum feriado");
            return false;
        }
        return true;
    }

    public void novo() {
        operacao = 0;
        limparCampos();
        ativarCampos();
        ativarBotoesSalvarCancelarSair();

        txtDescricaoFeriado.requestFocus();
    }

    public boolean preencherFeriado() {

        feriadoTemp = new Feriado();
        if (validarDescricao() && validarDataFeriado()) {

            feriadoTemp.setDtFeriado(jDateFeriado.getDate());
            feriadoTemp.setDescricaoFeriado(txtDescricaoFeriado.getText());

            //já que vai salvar, copia os dados para os originais
            Bean.copiarFeriado(feriadoTemp, feriado);

            //atualiza ou salva o funcionário
            if (operacao == 1) {
                persisteFeriado.atualizar(feriado);
                JOptionPane.showMessageDialog(null, "FERIADO ALTERADO COM SUCESSO");
            } else {
                persisteFeriado.salvar(feriado);
                posicao++;
                JOptionPane.showMessageDialog(null, "FERIADO SALVO COM SUCESSO");
            }
            operacao = -1;
            return true;
        }

        return false;
    }

    public void editar() {
        operacao = 1;
        
        exibirFeriados();
        ativarCampos();
        ativarBotoesNovoEditarExcluir();

        feriado = new Feriado();
        feriado = listaFeriados.get(posicao);

        txtDescricaoFeriado.requestFocus();
    }

    public void cancelar() {
        limparCampos();
        desativarCampos();
        posicao = -1;
        ativarBotoesIniciar();
    }

    public void ativarBotoesNovoEditarExcluir() {
        Swing.desativarCampos(jPanelBotoes.getComponents());
        btnSalvar.setEnabled(true);
        btnCancelar.setEnabled(true);
        btnSair.setEnabled(true);
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanelPrincipal = new javax.swing.JPanel();
        jPanelBotoes = new javax.swing.JPanel();
        btnNovo = new javax.swing.JButton();
        btnEditar = new javax.swing.JButton();
        btnExcluir = new javax.swing.JButton();
        btnPesquisar = new javax.swing.JButton();
        btnSalvar = new javax.swing.JButton();
        btnCancelar = new javax.swing.JButton();
        btnSair = new javax.swing.JButton();
        jLabel1 = new javax.swing.JLabel();
        jDateFeriado = new com.toedter.calendar.JDateChooser();
        jLabel2 = new javax.swing.JLabel();
        txtDescricaoFeriado = new javax.swing.JTextField();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("ERP BEAUTY CENTER - Cadastro de feriados");

        jPanelPrincipal.setBackground(new java.awt.Color(255, 255, 255));

        jPanelBotoes.setPreferredSize(new java.awt.Dimension(800, 45));

        btnNovo.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/beautycenter/img/Novo.png"))); // NOI18N
        btnNovo.setToolTipText("NOVO");
        btnNovo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnNovoActionPerformed(evt);
            }
        });

        btnEditar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/beautycenter/img/Editar.png"))); // NOI18N
        btnEditar.setToolTipText("ALTERAR");
        btnEditar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnEditarActionPerformed(evt);
            }
        });

        btnExcluir.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/beautycenter/img/Excluir.png"))); // NOI18N
        btnExcluir.setToolTipText("EXCLUIR");
        btnExcluir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnExcluirActionPerformed(evt);
            }
        });

        btnPesquisar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/beautycenter/img/Pesquisar.png"))); // NOI18N
        btnPesquisar.setToolTipText("PESQUISAR");
        btnPesquisar.setBorderPainted(false);
        btnPesquisar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnPesquisarActionPerformed(evt);
            }
        });

        btnSalvar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/beautycenter/img/Salvar.png"))); // NOI18N
        btnSalvar.setToolTipText("SALVAR");
        btnSalvar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnSalvarActionPerformed(evt);
            }
        });

        btnCancelar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/beautycenter/img/Cancelar.png"))); // NOI18N
        btnCancelar.setToolTipText("LIMPAR");
        btnCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCancelarActionPerformed(evt);
            }
        });

        btnSair.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/beautycenter/img/Sair.png"))); // NOI18N
        btnSair.setToolTipText("SAIR");
        btnSair.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnSairActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanelBotoesLayout = new javax.swing.GroupLayout(jPanelBotoes);
        jPanelBotoes.setLayout(jPanelBotoesLayout);
        jPanelBotoesLayout.setHorizontalGroup(
            jPanelBotoesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelBotoesLayout.createSequentialGroup()
                .addGap(74, 74, 74)
                .addComponent(btnNovo)
                .addGap(5, 5, 5)
                .addComponent(btnEditar)
                .addGap(5, 5, 5)
                .addComponent(btnExcluir)
                .addGap(5, 5, 5)
                .addComponent(btnPesquisar)
                .addGap(5, 5, 5)
                .addComponent(btnSalvar)
                .addGap(5, 5, 5)
                .addComponent(btnCancelar)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(btnSair)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanelBotoesLayout.setVerticalGroup(
            jPanelBotoesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelBotoesLayout.createSequentialGroup()
                .addGroup(jPanelBotoesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(btnNovo)
                    .addComponent(btnEditar)
                    .addComponent(btnExcluir)
                    .addComponent(btnPesquisar)
                    .addComponent(btnSalvar)
                    .addComponent(btnCancelar))
                .addGap(5, 5, 5))
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelBotoesLayout.createSequentialGroup()
                .addComponent(btnSair)
                .addContainerGap())
        );

        jLabel1.setText("Data:");

        jLabel2.setText("Descrição:");

        javax.swing.GroupLayout jPanelPrincipalLayout = new javax.swing.GroupLayout(jPanelPrincipal);
        jPanelPrincipal.setLayout(jPanelPrincipalLayout);
        jPanelPrincipalLayout.setHorizontalGroup(
            jPanelPrincipalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelPrincipalLayout.createSequentialGroup()
                .addGap(59, 59, 59)
                .addComponent(jLabel1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jDateFeriado, javax.swing.GroupLayout.PREFERRED_SIZE, 105, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(35, 35, 35)
                .addComponent(jLabel2)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(txtDescricaoFeriado, javax.swing.GroupLayout.PREFERRED_SIZE, 267, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(101, Short.MAX_VALUE))
            .addComponent(jPanelBotoes, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 652, Short.MAX_VALUE)
        );
        jPanelPrincipalLayout.setVerticalGroup(
            jPanelPrincipalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelPrincipalLayout.createSequentialGroup()
                .addComponent(jPanelBotoes, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addGroup(jPanelPrincipalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jDateFeriado, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel1)
                    .addComponent(jLabel2)
                    .addComponent(txtDescricaoFeriado, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(0, 23, Short.MAX_VALUE))
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jPanelPrincipal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(0, 2, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanelPrincipal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void btnNovoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnNovoActionPerformed
        novo();
    }//GEN-LAST:event_btnNovoActionPerformed

    private void btnEditarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnEditarActionPerformed
        editar();
    }//GEN-LAST:event_btnEditarActionPerformed

    private void btnExcluirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnExcluirActionPerformed
        excluir();
    }//GEN-LAST:event_btnExcluirActionPerformed

    private void btnPesquisarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnPesquisarActionPerformed
        PesquisarFeriados pesquisarFeriados = new PesquisarFeriados(this, true);
        pesquisarFeriados.setLocationRelativeTo(null);
        pesquisarFeriados.setVisible(true);

        ativarBotoesIniciar();
    }//GEN-LAST:event_btnPesquisarActionPerformed

    private void btnSalvarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSalvarActionPerformed
        if (preencherFeriado()) {
            iniciarTela();
        }
    }//GEN-LAST:event_btnSalvarActionPerformed

    private void btnCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCancelarActionPerformed
        cancelar();
    }//GEN-LAST:event_btnCancelarActionPerformed

    private void btnSairActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSairActionPerformed
        dispose();
    }//GEN-LAST:event_btnSairActionPerformed

    public void exibirFeriados() {
        if (listaFeriados.isEmpty()) {
            novo();
            return;
        }

        limparCampos();

        txtDescricaoFeriado.setText(listaFeriados.get(posicao).getDescricaoFeriado());

        if (listaFeriados.get(posicao).getDtFeriado() != null) {
            jDateFeriado.setDate(listaFeriados.get(posicao).getDtFeriado());
            //jDateFeriado.setDate(new SimpleDateFormat("dd/MM/yyyy").format(listaFeriados.get(posicao).getDtFeriado()));
        }

        desativarCampos();
    }

    public void excluir() {
        int response = JOptionPane.showConfirmDialog(null, "Deseja realmente excluir esse Feriado?", "Confirme",
                JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
        if (response == JOptionPane.NO_OPTION) {
            //não faz nada pois não precisa... vai dar o dialogo e voltar a tela... 
        } else if (response == JOptionPane.YES_OPTION) {
            persisteFeriado.deletar(listaFeriados.get(posicao));
            limparCampos();
            posicao = -1;
            operacao = 0;
        }
    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnCancelar;
    private javax.swing.JButton btnEditar;
    private javax.swing.JButton btnExcluir;
    private javax.swing.JButton btnNovo;
    private javax.swing.JButton btnPesquisar;
    private javax.swing.JButton btnSair;
    private javax.swing.JButton btnSalvar;
    private com.toedter.calendar.JDateChooser jDateFeriado;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JPanel jPanelBotoes;
    private javax.swing.JPanel jPanelPrincipal;
    private javax.swing.JTextField txtDescricaoFeriado;
    // End of variables declaration//GEN-END:variables
}